package corn

import (
	"context"
	"fmt"
	"time"
	"yunj/pkg/yunj/app/service/admin/taskservice"
	"yunj/pkg/yunj/core/corn"
	"yunj/pkg/yunj/core/enum/cornenum"
)

// 任务心跳停止处理
// 实现TaskInterface接口
type adminTaskHeartbeatDie struct {
	corn.Task
}

var AdminTaskHeartbeatDie = func() *adminTaskHeartbeatDie {
	task := &adminTaskHeartbeatDie{}
	task.Task.InitTaskInstance(task)
	return task
}()

// 名称
func (t *adminTaskHeartbeatDie) Name() string {
	return "admin.task.heartbeat.die"
}

// 描述
func (t *adminTaskHeartbeatDie) Desc() string {
	return "后台任务"
}

// 任务执行时间 - cron表达式
func (t *adminTaskHeartbeatDie) Spec() string {
	return fmt.Sprintf("*/%d * * * * *", taskservice.HeartbeatTimeoutTime())
}

// 定义默认的处理状态（没有配置数据库状态时应用）
func (t *adminTaskHeartbeatDie) DefaultHandleStatus() uint8 {
	return cornenum.TASK_STATUS_RUNNING
}

// 超时时间
// 不设置，永久执行
func (t *adminTaskHeartbeatDie) Timeout() time.Duration {
	return 0
}

// 任务处理函数
func (t *adminTaskHeartbeatDie) Handler(ctx context.Context) (err error) {
	if ctx.Err() != nil {
		return
	}
	err = taskservice.HandleDeartbeatDie()
	return
}
